package com.atwisdom.star.core.dsl.modelClass.hier;

import com.alibaba.fastjson.JSONObject;
import com.atwisdom.star.core.dao.pojo.modelClass.hier.HierModel;

import java.util.List;

public interface HierModelDslService {


    /**
     * 添加
     * @param hierProperties 类名
     * @return 返回模型记录
     */
    List<HierModel> add(JSONObject hierProperties);

    /**
     * 更新
     * @param hierProperties
     * @return
     */
    JSONObject update(JSONObject hierProperties);


    /**
     * 更新className
     * @param model
     * @param className
     * @param oldClassName
     * @return
     */
    boolean updateClassName(String model, String className, String oldClassName);


    /**
     * 查询
     * @param model
     * @param className
     * @param condition
     * @param orderBy
     * @return
     */
    JSONObject query(String model, String className, String condition, String orderBy);

    List<HierModel> clone(String model, String className, String oldClassName);

    /**
     * 按className查询hier模型
     * @param model 模型名称
     * @param className 模型名称
     * @return 返回
     */
    List<HierModel> queryByClassName(String model, String className);

    /**
     * 删除模型和实例
     * @param model 模型id
     * @param className 模型id
     * @return
     */
    boolean deleteByClassName(String model,String className);
    /**
     * 按classNames删除模型和实例
     * @param model 模型
     * @param classNames 模型
     * @return
     */
    boolean deleteByClassNames(String model,List<String> classNames);

    /**
     * 按className查询hier模型
     * @param model 模型名称
     * @param className 模型名称
     * @param nodeId 模型名称
     * @return 返回
     */
    HierModel queryByNodeId(String model,String className, String nodeId);

    <T> T fetchByPropertyName(String model, String className, String nodeName, String propertyName);

    <T> T fetchCondition(String model, String className);

    <T> T fetchInsFlag(String model, String className);

    /**
     * 按className查询hier模型
     * @param model 模型名称
     * @param className 模型名称
     * @param name 模型容器节点名
     * @return 返回节点node
     */
    HierModel queryByName(String model, String className, String name);
}
